﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using SERIX.Util;
using Biblioteca.DataBase;
using Pms.Utils;
using System.Data.Common;
using System.Data.OracleClient;

namespace SERIX
{
    /*
     * Autor      : IT-Developer1    
     * Data       : 02/04/2010 11:03:48
     * Descricao  : 
     * Alteracoes : 
     * 
     */
    public partial class AlterarSituacaoRME : Seguranca
    {
        private void lovSelecaoTecnico(string chave, string descricao)
        {
            txtNomeTecnico.Text = descricao;
            txtNomeTecnico.Attributes.Add("chave", chave);

            SqlMunicipios.SelectParameters["PARAM"].DefaultValue = chave;
            ddlMunicipios.DataBind();
            ddlMunicipios.Items.Insert(0, new ListItem());

            ddlProgramas.Items.Clear();
        }

        protected void ddlMunicipios_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlProgramas.SelectParameters["P_IDT_MUN"].DefaultValue = ddlMunicipios.SelectedValue;
            ddlProgramas.DataBind();
            ddlProgramas.Items.Insert(0, new ListItem());
        }

        protected void ddlProgramas_SelectedIndexChanged(object sender, EventArgs e)
        {
            SetSituacao();
        }

        private void SetSituacao()
        {
            string login = usuAut.Login;
            Query qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (!string.IsNullOrEmpty(ddlProgramas.SelectedValue))
                {
                    string SQL = @"SELECT STATUS FROM SERIX.SRX_RELATORIOS_LOTACOES
                                    WHERE ANO = :P_ANO AND MES = :P_MES 
                                          AND IDT_LOTACAO = F_OBTER_LOTACAO_ATIVA(:P_IDT_TEC, :P_IDT_MUN) 
                                          AND IDT_PROG = :P_IDT_PROG";
                    try
                    {
                        qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login), SQL);
                        qy.AdicionarParametro("P_ANO", DbType.String, txtAno.Text);
                        qy.AdicionarParametro("P_MES", DbType.String, ddlMeses.SelectedValue);
                        qy.AdicionarParametro("P_IDT_TEC", DbType.String, txtNomeTecnico.Attributes["chave"].ToString());
                        qy.AdicionarParametro("P_IDT_MUN", DbType.String, ddlMunicipios.SelectedValue);
                        qy.AdicionarParametro("P_IDT_PROG", DbType.String, ddlProgramas.SelectedValue);
                        qy.Executar();

                        try
                        {
                            string situacao = qy.ObterCampo("STATUS");
                            lblSituacao.Text = situacao;
                            lblSituacao.Attributes["chave"] = lblSituacao.Text;
                            lblSituacao.Text = (lblSituacao.Text == "A") ? "EM ANDAMENTO" : "FINALIZADO";
                            Ok_Button.Enabled = true;
                        }
                        catch (InvalidOperationException ex)
                        {
                            lblSituacao.Text = "SEM SITUAÇÃO DEFINIDA";
                            Ok_Button.Enabled = false;
                            throw ex;
                        }
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        private string ObterLotacaoAtiva()
        {
            string result = null;

            string login = usuAut.Login;
            Query qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (!string.IsNullOrEmpty(ddlProgramas.SelectedValue))
                {
                    string SQL = @"SELECT F_OBTER_LOTACAO_ATIVA(:P_IDT_TEC, :P_IDT_MUN) LOTACAO FROM DUAL";
                    try
                    {
                        qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login), SQL);
                        qy.AdicionarParametro("P_IDT_TEC", DbType.String, txtNomeTecnico.Attributes["chave"].ToString());
                        qy.AdicionarParametro("P_IDT_MUN", DbType.String, ddlMunicipios.SelectedValue);
                        qy.Executar();
                        result = qy.ObterCampo("LOTACAO");
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            return result;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);

            lovTecnicos.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecaoTecnico);
            lovTecnicos.ConfigurarLov("Serix", "SRX_TECNICOS", "IDT_TEC", "NOM_TEC", "NOM_TEC", "Pesquisa de Técnicos", "Nome");
        }

        protected void txtAno_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && string.IsNullOrEmpty(txtAno.Text))
                txtAno.Text = DateTime.Today.Year.ToString();
        }

        protected void ddlMeses_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && string.IsNullOrEmpty(ddlMeses.SelectedValue))
                ddlMeses.SelectedValue = DateTime.Today.Month.ToString();
        }

        protected void Ok_Button_Click(object sender, EventArgs e)
        {
            string login = usuAut.Login;
            OracleConnection conexao = null;
            OracleCommand comando = null;
            string lotacao = ObterLotacaoAtiva();
            try
            {
                conexao = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo);

                comando = new OracleCommand();
                comando.CommandText = "P_ALTERAR_STA_RME";
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = conexao;

                comando.Parameters.Add(new OracleParameter("P_ANO", txtAno.Text));
                comando.Parameters.Add(new OracleParameter("P_MES", ddlMeses.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_IDT_LOTACAO", lotacao));
                comando.Parameters.Add(new OracleParameter("P_IDT_PROG", ddlProgramas.SelectedValue));
                comando.Parameters.Add(new OracleParameter("P_STATUS", ObterStatusFinal()));
                
                comando.ExecuteNonQuery();
                SetSituacao();

                lblErro.Text = string.Format("Situação alterada com sucesso! Em {0}", DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            catch (Exception ex)
            {
                lblErro.Text = string.Format("*Erro: Problema na alteração da situação da RME! {0}. Em {1}", ex.Message, DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            finally
            {
                if (conexao.State == ConnectionState.Open)
                    conexao.Close();
                comando.Dispose();
                conexao = null;
                comando = null;
            }
        }

        private string ObterStatusFinal()
        {
            if (lblSituacao.Attributes["chave"].ToString() == "A")
                return "F";
            else
                return "A";
        }

        protected void Cancelar_Button_Click(object sender, EventArgs e)
        {
            LimparCriterios();
        }

        private void LimparCriterios()
        {
            txtNomeTecnico.Text = "";
            txtNomeTecnico.Attributes.Clear();

            ddlMunicipios.Items.Clear();
            ddlProgramas.Items.Clear();

            lblSituacao.Text = "";
        }

        protected void lblErro_Load(object sender, EventArgs e)
        {
            lblErro.Text = "";
            lblErro.Visible = false;
        }
    }
}
